// 引入服务端http/https请求模块
const request = require("request");
const crypto = require("crypto");
const path = require("path");
const fs = require("fs");

// 1）获取接口密钥APIKey 和 APISecret。
const apiKey = process.env.APIKey;
const apiSecret = process.env.APISecret;
const appId = process.env.APPID;

// 图片转base64
function parse(file) {
  let filePath = path.resolve(file); // 原始文件地址
  // let fileName = filePath.split('\\').slice(-1)[0].split('.'); // 提取文件名
  // let fileMimeType = mimeType.lookup(filePath); // 获取文件的 memeType

  // 如果不是图片文件，则退出
  // if (!fileMimeType.toString().includes('image')) {
  //     console.log(chalk.red(`Failed! ${filePath}:\tNot image file!`));
  //     return;
  // }

  // 读取文件数据
  let data = fs.readFileSync(filePath);
  data = Buffer.from(data).toString("base64");

  // // 转换为 data:image/jpeg;base64,***** 格式的字符串
  // let base64 = 'data:' + fileMimeType + ';base64,' + data;
  //
  // // 创建输出目录
  // let outPath = path.resolve('./base64/');
  // let outFileName = `${fileName.join('-')}.txt`;
  // let outFile = path.join(outPath, outFileName);
  // if (fs.existsSync(outPath)) {
  //     saveData(base64, outFile, filePath, outFileName);
  // } else {
  //     mkdirp(outPath, () => {
  //         saveData(base64, outFile, filePath, outFileName);
  //     });
  // }
  return data;
}

//console.log(parse('./public/img/test.png'))

function faceContrast() {
  // 2）参数authorization base64编码前（authorization_origin）的格式如下。
  // api_key="$api_key",algorithm="hmac-sha256",headers="host date request-line",signature="$signature"

  // 3）signature的原始字段(signature_origin)规则如下。 host: $host\ndate: $date\n$request-line
  const date = new Date().toGMTString(); // 获取GMT时间
  const signature_origin = `host: api.xf-yun.com\ndate: ${date}\nPOST /v1/private/sf8e6aca1 HTTP/1.1`;

  // 4）使用hmac-sha256算法结合apiSecret对signature_origin签名，获得签名后的摘要signature_sha。
  // signature_sha=hmac-sha256(signature_origin,$apiSecret)

  const hmac = crypto.createHmac("sha256", apiSecret).update(signature_origin);
  const signature_sha = hmac.digest("bytes");
  //console.log(signature_sha);
  // 5）使用base64编码对signature_sha进行编码获得最终的signature。
  const signature = signature_sha.toString("base64");
  // 6）根据以上信息拼接authorization base64编码前（authorization_origin）的字符串，示例如下。
  const authorization_base64 = `api_key="${apiKey}", algorithm="hmac-sha256", headers="host date request-line", signature="${signature}"`;

  // 7）最后再对authorization_origin进行base64编码获得最终的authorization参数。
  let authorization = new Buffer.from(authorization_base64).toString("base64");
  console.log("sss", authorization.length);
  // 请求体body
  let body = {
    header: {
      app_id: appId,
      status: 3,
    },
    parameter: {
      sf8e6aca1: {
        category: "ch_en_public_cloud",
        result: {
          encoding: "utf8",
          compress: "raw",
          format: "json",
        },
      },
    },
    payload: {
      sf8e6aca1_data_1: {
        encoding: "jpg",
        status: 3,
        image: parse("./public/img/test.png"),
      },
    },
  };

  return new Promise((resolve, reject) => {
    // 发送请求
    request(
      {
        url: `https://api.xf-yun.com/v1/private/sf8e6aca1?authorization=${authorization}&host=api.xf-yun.com&date=${date}`,
        method: "POST",
        headers: {
          "content-type": "application/json",
        },
        // http request body转JSON字符串
        body: JSON.stringify(body),
      },
      (err, res, body) => {
        if (err) {
          console.log("err", err);
          reject(err);
        }
        console.log(JSON.parse(body));
        //let text = JSON.parse(body)?.payload?.face_compare_result?.text;
      }
    );
  });
}
faceContrast();

module.exports = faceContrast;
